﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace ProyectoFinal
{
    public partial class Stock : Form
    {
        static string rutaSQL = "Data Source=localhost;Initial Catalog=Isotopos;Integrated Security=True;";
        DataSet TblStock;
        bool primeravez = true;
        int last_query = 0;
        bool habilitar_kepress = true;

        public Stock(string a="")
        {
            InitializeComponent();
            TblStock = new DataSet();
            cargar_datos_stock("UnidadesEnExistencia>0");
            last_query = 1;

            //Cargar Uno
            if(a!=""){ edit_producto(a);
            tx_add_pedido.Enabled = true;
            tx_add_stock.Enabled = true;            
            }//q carge de entrada el idproducto=a; , para form productos
     
        }

        private void cargar_datos_stock(string condicion)
        {
            if (!primeravez) TblStock.Tables["Stock"].Rows.Clear();
            SqlConnection con = new SqlConnection(rutaSQL);
            SqlCommand cmd = new SqlCommand("select IdProducto ,NombreProducto as [Nombre del Producto],UnidadesEnExistencia as [Stock Actual],UnidadesEnPedido as [Unidades Pedidas],StockMinimo from Productos where " + condicion, con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(TblStock, "Stock");
            datagrid_lista_stock.DataSource = TblStock.Tables["Stock"];
            datagrid_lista_stock.Columns[1].Width = 300;
            primeravez = false;
        }
        
        private void Form5_Load(object sender, EventArgs e)
        {
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            cargar_datos_stock("UnidadesEnExistencia>0");
            last_query = 1;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            cargar_datos_stock("UnidadesEnExistencia<" + lbl_lowstock.Text.ToString() + "  and UnidadesEnExistencia>0");
            last_query = 2;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            cargar_datos_stock("UnidadesEnExistencia=0");
            last_query = 3;
        }

        private void Cerrar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            cargar_datos_stock("UnidadesEnPedido>0");
        }

        public void cargar_datos(string idprod){
            
            try
            {
                string QuerySQL = "select IdProducto ,NombreProducto ,UnidadesEnExistencia ,UnidadesEnPedido,PrecioUnidadCompra,IdProveedor from Productos where IdProducto=" + idprod;

                SqlConnection con = new SqlConnection(rutaSQL);
                SqlCommand cmd = new SqlCommand(QuerySQL);

                //SqlDataAdapter adaptador = new SqlDataAdapter(QuerySQL, con);
                //adaptador.Fill(precio_prod., "Productos");

                DataTable tabla = new DataTable(); // El resultado lo guardaremos en una tabla
                SqlDataAdapter AdaptadorTabla = new SqlDataAdapter(QuerySQL, con); // Usaremos un DataAdapter para leer los datos
                AdaptadorTabla.Fill(tabla);// Llenamos la tabla con los datos leídos

                ed_stockactual.Text = tabla.Rows[0]["UnidadesEnExistencia"].ToString();
                ed_pedidos.Text = tabla.Rows[0]["UnidadesEnPedido"].ToString();
                ed_pedidos2.Text = tabla.Rows[0]["UnidadesEnPedido"].ToString();
                ed_idname.Text = tabla.Rows[0]["NombreProducto"].ToString();
                lbl_idprov.Text = tabla.Rows[0]["IdProveedor"].ToString();
                lbl_precio1.Text = tabla.Rows[0]["PrecioUnidadCompra"].ToString();
                ed_idprod.Text = idprod;
            }
            catch (Exception A)
            {
                MessageBox.Show(A.Message.ToString());
            }

        }

        public void edit_producto(string idprod)
        {
            //cargar
                   cargar_datos(idprod);
            //y abrir ese tab
                tab_opciones.SelectedTab = tab_edit;
        }

        public void edit_val()
        {
            tx_add_pedido.Enabled = true;
            tx_add_stock.Enabled = true;
            string mn = datagrid_lista_stock.SelectedRows[0].Index.ToString();
            string z = datagrid_lista_stock.Rows[Int16.Parse(mn)].Cells[0].Value.ToString();
            edit_producto(z);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            edit_val();
        }

        private void datagrid_lista_stock_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            edit_val();
        }

        public void ejecutar_consulta(string consulta)
        {
            SqlConnection con2 = new SqlConnection(rutaSQL);
            SqlCommand cmdInsert2 = con2.CreateCommand();
            cmdInsert2.CommandText = consulta;
            con2.Open();
            cmdInsert2.ExecuteNonQuery();
            con2.Close();

        }

        private void button6_Click(object sender, EventArgs e)
        {
            //CAST(RAND(CHECKSUM(NEWID())) * 100 as INT) + 1, 



            if (MessageBox.Show("¿Esta Seguro de querer cambiar los valores de Stock/Pedidos? Continuar?", "Confirmar Cambios.", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                string prd = ed_idprod.Text.ToString();
                string QuerySQL = "Update Productos Set UnidadesEnExistencia=" + tx_nuevo_stock.Text + ",UnidadesEnPedido=" + tx_nuevo_pedido.Text + " where IdProducto=" + prd;
                SqlConnection con = new SqlConnection(rutaSQL);
                SqlCommand cmdInsert = con.CreateCommand();
                cmdInsert.CommandText = QuerySQL;
                con.Open();
                cmdInsert.ExecuteNonQuery();
                con.Close();

                switch (last_query)
                {
                    case 1:
                        cargar_datos_stock("UnidadesEnExistencia>0");

                        break;
                    case 2:
                        cargar_datos_stock("UnidadesEnExistencia<" + lbl_lowstock.Text.ToString() + "  and UnidadesEnExistencia>0");

                        break;
                    case 3:
                        cargar_datos_stock("UnidadesEnExistencia=0");

                        break;
                }

                //Si hay nuevo pedido de stock
                if ((tx_add_pedido.Text != "") & (tx_add_pedido.Text != "0"))
                {
                    string dt = DateTime.Now.ToString("yyyyMMdd");
                    string am = float.Parse(lbl_precio1.Text).ToString().Replace(",",".");

                                        
                    ejecutar_consulta("Insert Into Pedidos (IdProducto,Cantidad,Precio,Fecha,IdProveedor,Estado) VALUES('" + prd + "','" + tx_add_pedido.Text + "','" + am+ "','" + dt + "','" + lbl_idprov.Text + "','1')");
                }

                habilitar_kepress = false;
                tx_nuevo_stock.Text = "";
                tx_nuevo_pedido.Text = "";
                tx_add_pedido.Text = "0";
                tx_add_stock.Text = "0";
                habilitar_kepress = true;
                tab_opciones.SelectedTab = tab_listado;
                cargar_datos(prd);//volver a cagar valores


         
            }
        }


        private void editar_val_nuevos(object sender, KeyEventArgs e)
        {
            //kepyress event para text4 ytext3

            if (habilitar_kepress)
            {
                try
                {
                    int nuevostock = Int16.Parse(tx_add_stock.Text);
                    int nuevopedidos = Int16.Parse(tx_add_pedido.Text);

                    tx_nuevo_pedido.Text = (int.Parse(ed_pedidos.Text) + nuevopedidos).ToString();
                    tx_nuevo_stock.Text = (int.Parse(ed_stockactual.Text) + nuevostock).ToString();
                }

                catch (Exception)
                {
                    tx_nuevo_pedido.Text = int.Parse(ed_pedidos.Text).ToString();
                    tx_nuevo_stock.Text = int.Parse(ed_stockactual.Text).ToString();
                }
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            int max = Int16.Parse(ed_pedidos.Text);
            int cant = Int16.Parse(ed_pedidos2.Text);
            if (cant > max)
            {
                MessageBox.Show("No puede haber recibido mas mercancias de las pedidas!");
                return;
            }

            if (MessageBox.Show("¿Esta Seguro de que llego el Pedido?? Continuar?", "Confirmar Cambios.", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                int stock = Int16.Parse(ed_stockactual.Text);
                int nuevostock = stock + cant;

                int pedidosnuevo=Int16.Parse(ed_pedidos.Text);
                pedidosnuevo = max - cant;

                string prd = ed_idprod.Text.ToString();
                string QuerySQL = "Update Productos Set UnidadesEnExistencia=" + nuevostock.ToString() + ",UnidadesEnPedido=" + pedidosnuevo.ToString() + " where IdProducto=" + prd;
                SqlConnection con = new SqlConnection(rutaSQL);
                SqlCommand cmdInsert = con.CreateCommand();
                cmdInsert.CommandText = QuerySQL;
                con.Open();
                cmdInsert.ExecuteNonQuery();
                con.Close();

                switch (last_query)
                {
                    case 1:
                        cargar_datos_stock("UnidadesEnExistencia>0");

                        break;
                    case 2:
                        cargar_datos_stock("UnidadesEnExistencia<" + lbl_lowstock.Text.ToString() + "  and UnidadesEnExistencia>0");

                        break;
                    case 3:
                        cargar_datos_stock("UnidadesEnExistencia=0");

                        break;
                }

                habilitar_kepress = false;
                tx_nuevo_stock.Text = "";
                tx_nuevo_pedido.Text = "";
                tx_add_pedido.Text = "0";
                tx_add_stock.Text = "0";
                habilitar_kepress = true;
                tab_opciones.SelectedTab = tab_listado;
                cargar_datos(prd);//volver a cagar valores

            }
        }

        private void button8_Click(object sender, EventArgs e)
        {
            try
            {
                edit_producto(tx_load1.Text.ToString());
            }

            catch (Exception jj)
            {
                MessageBox.Show(jj.Message + "\n" + "No se pudo cargar ese producto");
                    return;
            }
        }

        private void datagrid_lista_stock_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void btnVolver_Click(object sender, EventArgs e)
        {
            //tab_opciones.SelectedTab = tab_listado;
            this.Close();
        }

        private void button9_Click(object sender, EventArgs e)
        {
            cargar_datos_stock("UnidadesEnExistencia<=StockMinimo");
        }
    }
}